(function(Sea, Win, Doc){
	// 基本目录配置
	var pubjs = '/pubjs/source/';
	var path = Win.location.href.split('#').shift();
	var root = path;
	var app, controller, jQuery, util, platform;

	// 项目根目录修正
	function ROOT(path){
		if (root && path.charAt(0) != '/'){
			return root + path;
		}
		return path;
	}

	// 框架根目录修正
	function PUBJS(path){
		if (path.charAt(0) != '/'){
			return pubjs + path;
		}
		return path;
	}

	Win.ROOT = ROOT;
	Win.PUBJS = PUBJS;
	Win._T = function(text){ return text; }

	// 返回SeaJS配置信息
	function sea_config(){
		return {
			base: ROOT("project/"),
			alias: {
				// 全局初始配置
				"sys_config":	ROOT("addAccount/config.js"),

				// 基本模块缩写
				"app":			"@core/pub.js",
				"pubjs":		"@core/pub.js",
				"util":			"@core/util.js",
				"@controller":	"@plugins/controller.js",
				"@tpl":			"@plugins/template.js",
				"dspUtil":		"modules/dspUtil.js",
				"jquery":		"@libs/jquery/jquery-1.8.3.min.js",
				"@sys_labels":  "modules/labels",
				"md5":			"@libs/hmac-md5.js",
				"nicescroll":	"@libs/jquery/jquery.nicescroll.js"
			},
			paths: {
				// 目录缩写
				"@core":		PUBJS("core"),
				"@base":		PUBJS("base"),
				"@libs":		PUBJS("libs"),
				"@static":      ROOT("config/static"),
				"@plugins":		PUBJS("plugins")
			},
			map: [
				[/^.*$/, function(url){
					/* 加入版本号码 */
					if (Win.VERSION){
						url += (url.indexOf('?') == -1 ? '?v=' : '&v=') + Win.VERSION;
					}
					return url;
				}]
			],
			preload:[
				Win.JSON ? "" : "libs/json.js",
				Function.prototype.bind ? "" : "libs/es5-safe.js",
				// 引入pubjs样式库
				PUBJS('resources/css/uikit.min.css'),
				PUBJS('resources/css/icomoon/style.css'),
				PUBJS('resources/css/subcss/subcss.css'),
				PUBJS('resources/css/app.css'),
				// 引入jq和滚动条
				'jquery',
				'nicescroll'
			],
			debug: 0
		};
	}

	// 分部初始化函数
	function INIT_PROCESS(){
		var cb = INIT_STEPS[INIT_STAGE++];
		if (cb){
			cb.apply(Win, arguments);
		}
	}
	var INIT_STAGE = 0;
	var INIT_STEPS = [
		// 修正页面路径
		function(){
			if (root.slice(-1) !== '/'){
				root = root.substr(0, root.lastIndexOf('/') + 1);
			}
			var node = Doc.getElementsByTagName('base');
			if (node.length){
				root = node[0].getAttribute('href');
				node[0].setAttribute('href', path);
			}
			//TODO: 暂时把pubjs部署在项目目录下
			pubjs = ROOT('pubjs/source/');
			// SeaJS全局配置
			Sea.config(sea_config());
			// 引入模块, 开始初始化
			Sea.use(['pubjs', 'sys_config', 'jquery', 'util'], INIT_PROCESS);
		},

		// 加载pubjs和系统全局配置
		function(pubjs, config, JQUERY, UTIL){
			app = pubjs;
			jQuery = JQUERY;
			util = UTIL;

			app.init(config);

			// 加载用户及控制器等插件模块
			app.use([
				//'@plugins/controller',
				'@plugins/i18n',
				'@plugins/model',
				'@plugins/user',
				'@plugins/alert',
				'@plugins/codecopy',
				'@plugins/drag',
				'@plugins/mc',
				'@plugins/mvvm',
				'@plugins/standerNumber',
				'@plugins/storage'
			], INIT_PROCESS);
		},
		// 配置完成, 启动应用
		function(){
			jQuery('body').removeClass('appLoading');
			jQuery('.loadingBoxCircle').remove();
			jQuery('.loadingBox, noscript').remove();
			// 调整添加产品账号的内边距，使其不会贴边
			jQuery('body').addClass('product');

			// 拿出token等验证信息
			var hash = Win.location.href.replace(/^[#\/\!]+/, '');
			var search = hash.split('?')[1];
			if(!search) {
				app.alert(LANG('对不起, 没有权限.'));
				return false;
			}
			search = search.split("&");
			var data = {};
			for(var i =0;i<search.length;i++){
				search[i] = search[i].split("=");
				data[search[i].shift()] = search[i].join('=');
			}


			app.mc.send('login/verifyToken', data, function(err, param){
				if(err){
					app.alert(err.message);
					return false;
				}
				/*if(param.account) {
					if(param.account.length > 1) {
						app.core.createAsync('selectAccount', 'addAccount/popwin/selectAccount.base',{
							param: data
							,list: param.account
							,cb: addAccount
						}, function(mod) {
							mod.show();
						})
					}
					else if(param.account.length == 1){
						app.mc.send('login/verifyAccount', util.extend({}, data,{accountId: param.account[0].UserId}), addAccount);
					}
					else {
						app.alert(LANG('请先给该账号的父账号建立一个产品账号.'));
						return false;
					}
				}*/
				if(param.account && param.account.length){
					app.mc.send('login/verifyAccount', util.extend({}, data,{accountId: param.account[0].UserId}), addAccount);
				}else{
					app.alert(LANG('请先给该账号的父账号建立一个产品账号.'));
						return false;
				}
			});

		}
	];

	function addAccount(err, param) {
		if(err) {
			app.alert(err.message);
			return false;
		}

		if(param && param.user){
			app.setUser(param.user);
		}

		// 发送登陆请求
		var cb = app.config('loginCb');
		if(cb && util.isFunc(cb)) {
			cb(app, function() {
				app.core.createAsync('addAccount','addAccount/action/add.base',{
					'target': jQuery('body')
				});
			});
		}
	}
	// 初始化应用对象
	INIT_PROCESS();
})(seajs, window, document);
